package com.nuc.bigdata.annotation;

import java.lang.annotation.*;

/**
 * Target
 *  用于标注这个注解放在什么地方，类上，方法上，构造器上
 *  ElementType.METHOD 用于描述方法
 *  ElementType.FIELD 用于描述成员变量，对象，属性（包括enum实例）
 *  ElementType.LOCAL_VARIABLE 用于描述局部变量
 *  ElementType.CONSTRUCTOR 用于描述构造器
 *  ElementType.PACKAGE 用于描述包
 *  ElementType.PARAMETER 用于描述参数
 *  ElementType.TYPE 用于描述类，接口，包括（包括注解类型）或enum声明
 *
 * Retention
 *  用于说明这个注解的生命周期
 *  RetentionPolicy.RUNTIME 始终不会丢弃，运行期也保留该注解。因此可以使用反射机制来读取该注解信息。
 *  我们自定义的注解通常用这种方式
 *  RetentionPolicy.CLASS 在类加载的时候丢弃，在字节码文件的处理中有用。注解默认使用这种方式
 *  RetentionPolicy.SOURCE 在编译阶段丢弃，这些注解在编译结束后就不再有任何意义，所以他们不会写入字节码中
 *  @Override,@SuppressWarnings都属于这类注解。
 *  我们自定义使用中一般使用第一种
 *  java过程为 编译-加载-运行

 * @author JackLuo
 * @date 2019/10/23
 */
@Target(value = {ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface Permission {
    boolean value();
}
